package day9;

//通过Synchronized模拟多线程 轮流并发执行
//假设三个线程 DemoA，B，C  要求顺序ABCABC...
//1.可以使用逻辑判断 控制流程  无需使用wait() notify()...
//缺点:浪费很多次循环次数  而且代码特别冗余
//2.借助于wait()和notify()实现
public class Demo5 {
    int n = 1;    //如果是1打印A 如果是2打印B 如果是3打印C
    int id;    //0(DemoA)  1(B)    2(C)    %3 = 0 1 2

    public synchronized void printA() {
        if (n == 1) {
            System.out.println(Thread.currentThread().getName());
            n = 2;
        }
    }

    public synchronized void printB() {
        if (n == 2) {
            System.out.println(Thread.currentThread().getName());
            n = 3;
        }
    }

    public synchronized void printC() {
        if (n == 3) {
            System.out.println(Thread.currentThread().getName());
            n = 1;
        }
    }


    public static void main(String[] args) {
        Demo5 d = new Demo5();

        new Thread(() -> {
            while (true)    d.printA();
        }, "A").start();
        new Thread(() -> {
            while (true)    d.printB();
        }, "B").start();
        new Thread(() -> {
            while (true)    d.printC();
        }, "C").start();


    }
}
